package com.example.personblog.controller;

import com.example.personblog.entity.User;
import com.example.personblog.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController{
    @Autowired
    UserMapper userMapper;
    @GetMapping("/user/findAll")
    public List<User> find() {
        // 仅查询用户表，不关联订单
        return userMapper.selectList(null); // 使用MyBatis-Plus默认查询方法
    }

    //测试一个客户对多个订单测试关联接口
    @GetMapping("/user/findAllWithOrders")
    public List<User> findAllWithOrders(){
        return userMapper.selectAllUserAndOrders();
    }

}



/*
这是方法一使用MyBatis手写的更改和删除映射代码
@RestController//证明UserController由类变成了控制器可以接收前端的请求了
public class UserController {
    //如果想要用UserMapper可以声明一下,记得用@Autowired注解
    //  @Autowired属于spring的功能,表明要去注入这个usernapper对象的值,会把UserMapper接口里
    @Autowired
    private UserMapper userMapper;//不加@Autowired这样声明变量值为空
    @GetMapping("/user")
    public List query(){//使用List query()这样在前后端分离项目里后端可以将查询内容自动转为JSON格式供前端进行渲染,原先为:public String query
        //声明了映射接口后就可以用对象调用方法了,并将查询出来的信息放在list集合中,因为不止几个数据,用集合会更方便于操作
        List<User> list=userMapper.find();
        //MB版本: List<User> list=userMapper.find();
        //MB-plus版本查询: List<User> list=userMapper.selectList(里面放查询条件,无条件就写null)
        System.out.println(list);
        return list;
    }
     @PostMapping("/user")
    public String save(User user){
        int i=userMapper.insert(user);
        //MB-plus和MB一样,里的insert可以直接用,内置了方法
        if (i>0){
            return "插入成功";
        }else{
            return "插入失败";
        }
    }

     @DeleteMapping("/user")
    public String delete(int id){
       int i= userMapper.delete(id);
       return "删除成功";
     }

    @PutMapping("/user")
    public String update(@RequestBody User user){//@RequestBody User user：用于接收前端以 JSON 格式传递的用户数据（包含 id、username、password、birthday 等字段）。
        // 调用mapper的update方法执行更新，返回受影响的行数
        int rows = userMapper.update(user);
        //userMapper.update(user) 会根据 user 对象中的 id 定位到数据库中的记录，并更新其他字段。
        //返回值 rows 表示被更新的记录数：若为 0，可能是 id 不存在或传递的字段与数据库原数据完全一致（未发生修改）。
        if (rows > 0) {
            return "用户信息更新成功";
        } else{
            return "更新失败,可能ID不存在或数据被修改";
        }
    }
 */